// ActionScript file

	
	import com.sodimac.util.commons.UtilFormat;
	import com.sodimac.util.commons.UtilXml;
	
	import flash.net.navigateToURL;
	
	import mx.collections.ArrayCollection;
	import mx.rpc.events.ResultEvent;
	import mx.utils.ObjectUtil;
	
	//Variables generales
	[Bindable] public var proveedores:ArrayCollection = null;	
	
	//Variables para generar el Reporte
	[Bindable] public var fechaInicio:String = "";
	[Bindable] public var fechaTermino:String = "";
	[Bindable] public var compra:String = "";
	[Bindable] public var codigoProv:String = "";
	[Bindable] public var frmt:String ="";
	
	//Variables para la ubicar servicios
	[Bindable] public var WSDL_FILTROS:String = null;
	
	//Variable para ubicar reportes	
	[Bindable] public var PaisesArr:Array;
	[Bindable] public var InformesArr:Array;
	
	//Mensajes de error
	public var propiedades: XML = null;
	
	
	public function init():void {
		
//            //Validación de sesion
//            sesion = new Sesion(Application.application);
//            if ((sesion.getCodigoRolPersona() != ROL_ADMINISTRADOR) || (sesion.getOrigenAplicacion() != ORIGEN_APLICACION)) {
//                throw new Error("No tiene los permisos para ejecutar la aplicación.");
//            }
          
            //Carga la aplicacion
            propertiesFile.send();
            
            //Llamada a WS
            wsProveedores.getProveedores.send();
            

	}
	
	
	public function selectAllProveedores(id:int):void{
	
	    var allRows:int = proveedores.length;
	    var selected: Array = new Array();
	    
	    for (var i:int = 0; i < allRows; i++){
            selected.push(i);
	    }
	    
		switch (id){
		case 1:	lstProveedores.selectedIndices  = selected;   	
				break;
		case 2:	lstProveedores2.selectedIndices = selected;   	
				break;
		case 3:	lstProveedores3.selectedIndices = selected;   	
				break; 
		}		    

	}	
	
	public function selectAllProveedores3():void{
	
	    var allRows:int = proveedores.length;
	    var selected: Array = new Array();
	    
	    for (var i:int = 0; i < allRows; i++){
            selected.push(i);
	    }
	    lstProveedores3.selectedIndices = selected;
	    
	}


	public function addItemForm():void {

	if (tipoConsulta.selectedValue == 'corp') {		
		vin.visible=true;
		vin.includeInLayout=true;
		sku.visible=false;
		sku.includeInLayout=false;		
	}else {
		sku.visible=true;
		sku.includeInLayout=true;
		vin.visible=false;
		vin.includeInLayout=false;		
		
	}	

}

	public function getProperties():void {
		
		propiedades = new XML(propertiesFile.lastResult.toString());
        WSDL_FILTROS = propiedades.ws.filtros_reporte;
        procesaInformes_xml(propiedades.reportes_proceso);
        procesaPaises_xml(propiedades.paises);
        
	}		
	
	public function procesaProveedores_result(evt:ResultEvent):void 
	{
			var xmlList:XMLList;
			var xml:XML = new XML(ObjectUtil.toString(evt.result));
			xml = UtilXml.removeNamespacesFromXML(xml);
			xmlList = xml.children();
			
			var result:Number = Number(xmlList.cabecera.@id);
			var glosa:String =  xmlList.cabecera.@glosa;	
			//trace('xmlList -->' + xmlList.toXMLString());		
			trace("WS Filtros (getProveedores) response id=" +result);

	  	      switch (result){
	  	      case 0:   //Ok
	  	      			var xmlProd:XMLList = xmlList.payload.proveedores;
						procesaProveedores_xml(xmlProd);	
	  	      			break;
	  	      			
	  	      case 1:   //Error
	  	      			alert.error("Ha ocurrido un error:\n\n"+  glosa);
	  	      			break;
	  	      			
	  	      default:  //reintentar
	  	      	  	     alert.info("Problemas con respuesta del servicio, " + 
									"favor reintente mas tarde.\n\n"+ glosa);
	  	      			break; 
	  	      }			                 	      						
		
	}

	public function cambiaFiltros():void
	{
		limpiarFiltros();
		
		switch ( cmbInformes.selectedItem.id)
		{
			case 'rep1': 
						 filtrosReporte2.visible = false;
						 filtrosReporte3.visible = false;
						 filtrosReporte2.includeInLayout = false;
						 filtrosReporte3.includeInLayout = false;
						 filtrosReporte1.includeInLayout = true;
						 filtrosReporte1.visible = true;
						 break; 
			case 'rep2': 
			case 'rep3': 
						 filtrosReporte1.visible = false;
						 filtrosReporte3.visible = false;			
						 filtrosReporte1.includeInLayout = false;
						 filtrosReporte3.includeInLayout = false;
						 filtrosReporte2.includeInLayout = true;
						 filtrosReporte2.visible = true;
						 break; 
			case 'rep4': 
						 filtrosReporte1.visible = false;
						 filtrosReporte2.visible = false;			
						 filtrosReporte1.includeInLayout = false;
						 filtrosReporte2.includeInLayout = false;
						 filtrosReporte3.includeInLayout = true;
						 filtrosReporte3.visible = true;
						 break; 						 
		}	
	}

		
	public function procesaInformes_xml(infoList:XMLList):void 
	{
		var repArr:Array= new Array();
        
		for each(var rep:XML in infoList.reporte)			
		{
             var tmp:Object = new Object();
 			 tmp.id = String(rep.id);
             tmp.nombre = String(rep.nombre);
             tmp.url = String(rep.url);

			 repArr.push(tmp);
              
        }
        InformesArr = repArr;
        
        //prepara filtros
        cambiaFiltros();
        trace('--> fin procesaInformes_xml');
	}		
		
	public function procesaProveedores_xml(prodList:XMLList):void 
	{
		var provArr:ArrayCollection= new ArrayCollection();
        
        
		for each(var proveedor:XML in prodList.proveedor)			
		{
             var tmpProv:Object = new Object();
 			 tmpProv.id = Number(proveedor.id);
             tmpProv.desc = String(proveedor.descripcion) + " ("+ proveedor.id +")" ;

			 provArr.addItem(tmpProv);
              
        }
        proveedores = provArr;
        lstProveedores.dataProvider = provArr;
        lstProveedores2.dataProvider = provArr;
        lstProveedores3.dataProvider = provArr;
        trace('--> fin procesaProveedores_xml');
	}	
	
	
	public function procesaPaises_xml(pList:XMLList):void 
	{
		var pArr:Array= new Array();
        
        //option 0
         var tmp:Object = new Object();
 		 tmp.id = "";
         tmp.nombre = "Seleccione ...";
		 pArr.push(tmp);        
        
		for each(var pais:XML in pList.pais)			
		{
             var tmpPais:Object = new Object();
 			 tmpPais.id = String(pais.@codIata);
             tmpPais.nombre = String(pais.@nombre);

			 pArr.push(tmpPais);
              
        }
        PaisesArr = pArr;
        //cmbPaises.dataProvider = pArr;
        trace('--> fin procesaPaises_xml');
	}
		

	public function getProveedoresList(arr:Array):String 
	{
		var s:String = "";
		
		var n:int = arr.length;

		for (var i:int = 0; i < n; i++)
			{
				if (s.length)
					s += ",";
				s += arr[i].id;
			}

        trace('--> fin getProveedoresList(): ' + s );
        return s;
	}

	
	public function validaFechas(fechaInicio:String, fechaTermino:String):Boolean{
		
		var utilFechas:UtilFormat = new UtilFormat();
		return utilFechas.compararFecha(fechaInicio,fechaTermino);
	}
	
	
	public function limpiarFiltros():void {

		//filtros1
		tipoCompra.selection = null;
		tipoCompra3.selection = null;
		tipoConsulta.selection = null;
		//tipoConsulta3.selection = null;

    	dateDesde.text = "";
    	dateDesde2.text = "";
		dateDesde3.text = "";
    	dateHasta.text = "";
    	dateHasta2.text = "";
    	dateHasta3.text = "";

		lblProv.text = "";
		lblProv2.text = "";
		lblProv3.text = "";
		
		lstProveedores.selectedIndex = -1;
		lstProveedores2.selectedIndex = -1;
		lstProveedores3.selectedIndex = -1;
		
		cmbPaises.selectedIndex = 0;	
		//cmbPaises3.selectedIndex = 0;
		
		chkAllProveedores.selected = false;
		chkAllProveedores2.selected = false;
		chkAllProveedores3.selected = false;
		
    	vboxCuerpo.removeMensajeError();
	}
	

	
	public function validarFiltros():Boolean {
		var estado:Boolean = true;
		var msg:String ="";

		vboxCuerpo.removeMensajeError();
		
		trace("selectedIndex = "+ cmbInformes.selectedIndex + " opc=" + cmbInformes.selectedItem.nombre);

		//Evaluar parametros de entrada según reporte		
		switch(cmbInformes.selectedIndex )
		{
		    case 0:
		        //Participación Compras
		        
				if (tipoCompra.selectedValue != null) {
					compra = tipoCompra.selectedValue.toString();
				} else {
					msg = propiedades.mensajes.error.faltaTipoCompra;
					estado = false;
				}		
				
				if (dateDesde.text != "") {
					fechaInicio = dateDesde.text
				}
				if (dateHasta.text != "") {
					fechaTermino = dateHasta.text
				}		
				if (estado) {
				    if  ((fechaInicio != "") && (fechaTermino != "")){
						if (validaFechas(fechaInicio,fechaTermino)){
							estado = true;			
						}else {
							msg = propiedades.mensajes.error.periodoNoValido;
							estado = false;			
						}
				    } else {
						msg = propiedades.mensajes.error.faltaPeriodo;
						estado = false;					
					}	
				}
				
				if (estado) {		
					//listado de proveedores
					if (chkAllProveedores.selected) {
						codigoProv = "all";
					}else {
						codigoProv = lblProv.text;
					}
		
					if (codigoProv == "") {
						msg = propiedades.mensajes.error.sinProveedor;
						estado = false;
					}
				}
				//trace('listado de proveedores: ' + codigoProv );				
		
		
				if (estado) {		
					if (formatoSalida.selectedValue != null) {
						frmt = formatoSalida.selectedValue.toString();
					} else {
						msg = propiedades.mensajes.error.faltaFormato;
						estado = false;
					}
				}			        
		        
		        break;
		    case 1:
		    case 2:
		        //Evolución Precio y Cantidad
		        
				if (tipoConsulta.selectedValue != null) {
					compra = tipoConsulta.selectedValue.toString();
				} else {
					msg = propiedades.mensajes.error.faltaTipoConsulta;
					estado = false;
				}		

				if ( (estado) &&  (compra == "pais")) {
					 //check seleccion pais
					if (cmbPaises.selectedIndex ==0)
					{
						msg = propiedades.mensajes.error.faltaPais;
						estado = false;					
					} else {
						compra = cmbPaises.selectedItem.id;
					} 
				}
				
				
				if (estado) {		
					//listado de proveedores
					if (chkAllProveedores2.selected) {
						codigoProv = "all";
					}else {
						codigoProv = lblProv2.text;
					}
		
					if (codigoProv == "") {
						msg = propiedades.mensajes.error.sinProveedor;
						estado = false;
					}
				}				
				
				if (dateDesde2.text != "") {
					fechaInicio = dateDesde2.text
				}
				if (dateHasta2.text != "") {
					fechaTermino = dateHasta2.text
				}		
				if (estado) {
				    if  ((fechaInicio != "") && (fechaTermino != "")){
						if (validaFechas(fechaInicio,fechaTermino)){
							estado = true;			
						}else {
							msg = propiedades.mensajes.error.periodoNoValido;
							estado = false;			
						}
				    } else {
						msg = propiedades.mensajes.error.faltaPeriodo;
						estado = false;					
					}	
				}
				
				if (estado) {		
					if (formatoSalida.selectedValue != null) {
						frmt = formatoSalida.selectedValue.toString();
					} else {
						msg = propiedades.mensajes.error.faltaFormato;
						estado = false;
					}
				}				        
		        
		        break;
		        
		    case 3:
		        //Informe de Compras
		        compra = "all";
		        /*
				if (tipoConsulta3.selectedValue != null) {
					compra = tipoConsulta3.selectedValue.toString();
				} else {
					msg = propiedades.mensajes.error.faltaTipoConsulta;
					estado = false;
				}		

				if ( (estado) &&  (compra == "pais")) {
					 //check seleccion pais
					if (cmbPaises3.selectedIndex ==0)
					{
						msg = propiedades.mensajes.error.faltaPais;
						estado = false;					
					} else {
						compra = cmbPaises3.selectedItem.id;
					} 
				}
				*/
				
				
				if (estado) {		
					//listado de proveedores
					if (chkAllProveedores3.selected) {
						codigoProv = "all";
					}else {
						codigoProv = lblProv3.text;
					}
		
					if (codigoProv == "") {
						msg = propiedades.mensajes.error.sinProveedor;
						estado = false;
					}
				}				
				
				if (dateDesde3.text != "") {
					fechaInicio = dateDesde3.text
				}
				if (dateHasta3.text != "") {
					fechaTermino = dateHasta3.text
				}		
				if (estado) {
				    if  ((fechaInicio != "") && (fechaTermino != "")){
						if (validaFechas(fechaInicio,fechaTermino)){
							estado = true;			
						}else {
							msg = propiedades.mensajes.error.periodoNoValido;
							estado = false;			
						}
				    } else {
						msg = propiedades.mensajes.error.faltaPeriodo;
						estado = false;					
					}	
				}

				if (estado) {				
					if (tipoCompra3.selectedValue != null) {
						compra = tipoCompra3.selectedValue.toString();
					} else {
						msg = propiedades.mensajes.error.faltaTipoCompra;
						estado = false;
					}					
				}	
					
				if (estado) {		
					if (formatoSalida.selectedValue != null) {
						frmt = formatoSalida.selectedValue.toString();
					} else {
						msg = propiedades.mensajes.error.faltaFormato;
						estado = false;
					}
				}				        
		        break;

		    default:
		        trace("no report");
		        break;
		}
		
		
		if (estado){
			vboxCuerpo.removeMensajeError();
		} 
		else {
			vboxCuerpo.addMensajeError(msg);
		}
		
		return estado;
	}
	
	
	
	public function generarInforme():void {
		
		if (validarFiltros()){
			
            var request:URLRequest = new URLRequest();
            var str:String ="";
			str =	cmbInformes.selectedItem.url +
					"?usuario=" + "usuario" +
					"&formato="+ frmt +
					"&tcompra=" + compra + 
					"&fechaInicio="+ UtilFormat.formatearFechaDB(fechaInicio) +
					"&fechaTermino="+ UtilFormat.formatearFechaDB(fechaTermino) +
					"&vendor="+ codigoProv;
					
			request.url = str;			
			trace("URL " + str );					
			request.method = URLRequestMethod.POST;
            navigateToURL(request,'_blank');	
		}
	}




	
	
	